'use strict'
process.chdir(__dirname)
const titbit = require('titbit');
const fs = require('fs')
const pg = require('pg')
const dbconfig = require('./dbconfig.js')
const tbloader = require('titbit-loader')
const wxkey = require('./wxkey.js')
const token = require("titbit-token")
const {httpcli} = require('gohttp')
let tok = new token({
    //token有效期，单位是秒
    expires:30,
    //必须是32位字母数字
    key:'a1s2d3f4w5e7r8f5dfg12s3d45f6gh12',
    //必须是16位字母数字
    iv :'1a3f5w4r8t9s4h2f'
})
//初始化数据库连接
let psql = new pg.Pool(dbconfig)

try{
    fs.accessSync('./images')
}catch(err){
    fs.mkdirSync('./images')
}


let cert_path = '/usr/local/share'
const app = new titbit({
    //开启调试模式，会输出错误信息
    debug:true,
    globalLog:true,
    cert:`${cert_path}/wx.xxmtcds.top.pem`,
    key:`${cert_path}/wx.xxmtcds.top.key`
})

let tb = new tbloader();
tb.init(app);
//就是在app.service对象上添加了一个属性
app.addService('tok',tok)
app.addService('psql',psql)
app.addService('imagePath',`${__dirname}/images`)

//c就是context
app.get('/',async c=>{
    c.send('ok')
})

app.get('/upload',async c=>{
    //c.helper是助手函数模块,其中有对stream.pipe的封装
    //c.replay是响应对象，http/1.1中指向response，http/2中指向stream
    await c.helper.pipe('./upload.html',c.reply)
})

//js无需加分号，谁用谁知道，有时也得加分号，括号开头很需要
/*;(async()=>{
    await c.helper.pipe('./upload.html',c.reply)
})();*/

app.get('/user/:name/:age/:mobile',async c =>{
    console.log(c.param)
    c.send(c.param)
})
app.get('/mp-login/:code',async c=>{
   
    let auth_url=`https://api.weixin.qq.com/sns/jscode2session`
                +`?appid=${wxkey.appid}&secret=${wxkey.secret}'
                +'&js_code=${c.param.code}&grant_type=authorization_code`

    let ret = await httpcli.get(auth_url)
                            .then(res=>{
                                return res.json()
                            })
    c.send(tok.make(ret))
})

app.run(7778)


//协议://域名:端口/路径?查询字符串 #hash